Testing is a fundamental part of the software development process. Generally, software testing phase involves finding bugs and fixing them. From the perspective of the programmer, fixing bugs usually involves two tasks. First, the root cause of the bug should be found (diagnosis), and then the faulty software component should be fixed. Diagnosing the root cause of a software bug is often a challenging task that involves a trial-and-error process: several possible diagnoses are suggested by the programmer, which then performed tests and probes to differentiate the correct diagnosis. One of the reasons why this trial-and-error process is challenging is because it is often non-trivial to reproduce bugs found by a tester.
An ideal solution to this problem would be that the tester, when observing a bug, will perform additional test steps to help the programmer find the software component that caused the bug. However, planning these additional test steps cannot be done efficiently without being familiar with the code of the tested software. Often, testing is done by Quality Assurance (QA) professionals, which are not familiar with the software code that they are testing. This separation, between those who write the code and those who test it, is even regarded as a best-practice, allowing unbiased testing.
In this work we propose to enhance the software testing process described above by combining model-based diagnosis (MBD) and planning techniques from the Artificial Intelligence (AI) literature. MBD algorithms have been proposed in the past for the purpose of diagnosing software bugs. Thus, when a tester encounters a bug, any of these algorithms can be used to generate a set of candidate diagnoses automatically.
However, the problem of identifying which of these candidate diagnoses is indeed the correct diagnoses still remains.
It is therefore an object of the present invention to provide a method for improving software testing using model-based diagnosis, which helps identifying which of the candidate diagnoses is the diagnosis which can isolate potentially faulty software components.
It is another object of the present invention to provide a method for improving software testing, which helps planning additional tests for the tester, to differentiate between these candidate diagnoses and identify the correct diagnosis.
It is a further object of the present invention to provide a method for improving software testing, which help planning additional tests for the tester, to identify the correct diagnosis.
It is yet another object of the present invention to provide a method for improving software testing, in which the additional tests are generated automatically.
Other objects and advantages of the invention will become apparent as the description proceeds.